// 给定一个二进制矩阵 A，我们想先水平翻转图像，然后反转图像并返回结果。

// 水平翻转图片就是将图片的每一行都进行翻转，即逆序。例如，水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
// 反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。例如，反转 [0, 1, 1] 的结果是 [1, 0, 0]。

const flipAndInvertImage = function (A: number[][]): number[][] {
    // 先对第一行进行水平翻转
    for (let i = 0; i < A.length; i++) {
        flipAndInvertImage_flip(A[i]);
    }
    // 对整个矩阵进行扫描翻转
    for (let i = 0; i < A.length; i++) {
        for (let j = 0; j < A[0].length; j++) {
            A[i][j] = A[i][j] === 1 ? 0 : 1;
        }
    }
    return A;
};

// 辅助水平翻转方法
function flipAndInvertImage_flip(arr: number[]): void {
    let left = 0;
    let right = arr.length - 1;
    while (left < right) {
        [arr[left], arr[right]] = [arr[right], arr[left]];
        left++;
        right--;
    }
}

// 别想复杂了，把题目翻译一边即可...
// 要是面试题也这么简单就好了